package com.winning.dps.ds.service.common.data_source.model;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import common.entity.SysEsbSjyEntity;
import common.jdbc.sql.SqlAdapterFactory;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @作者： caopengfei
 * @时间： 2020/9/7
 *  数据源配置类
 */
@Data
public class DataSourceEntity {
    /** 数据库类型 */
    private String dbTypeName;
    /** IP地址 */
    private String  ip;
    /** 端口 */
    private String port;
    /** 数据库实例 */
    private String dbName;
    /** 用户名 */
    private String username;
    /** 密码 */
    private String password;
    /** 连接地址 */
    private String url;
    /** 数据库驱动 */
    private String driverClassName;
    /** 最大连接数 默认10 */
    private int maxActive=10;

    /** 最小空闲连接数 最小等待一个连接数 */
    private int minIdle=1;

    /** 线程池初始化大小 线程池默认一个连接数 */
    private int initialSize=1;

    /** 最大建立连接等待时间 默认30s */
    private int maxWait=50000;

    public DataSourceEntity() {

    }

    public DataSourceEntity(SysEsbSjyEntity sysEsbSjyEntity) {
        this.dbTypeName = sysEsbSjyEntity.getSjklx().toUpperCase();
        this.ip = sysEsbSjyEntity.getIp();
        this.port = sysEsbSjyEntity.getPort();
        this.dbName = sysEsbSjyEntity.getSjkmc();
        this.username = sysEsbSjyEntity.getUsername();
        this.password = sysEsbSjyEntity.getPassword();
    }

    public DataSourceEntity(String dbTypeName, String ip, String port, String dbName, String username, String password) {
        this.dbTypeName = dbTypeName;
        this.ip = ip;
        this.port = port;
        this.dbName = dbName;
        this.username = username;
        this.password = password;
    }

    /** 平台拼接连接URL */
    public String getUrl() {
        return SqlAdapterFactory.getSqlAdapter(dbTypeName).getUrl(ip,port,dbName);
    }

   /** 获取数据库的驱动名称 */
    public String getDriverClassName() {
        return  SqlAdapterFactory.getDBTypeByName(dbTypeName).driverClass();
    }

    /**
    * @comment： 转换为Map
    * @author： caopengfei
    * @time：  2020/9/9 14:06
    */
    public Map<String,String> toMap(){
        Map<String,String> datasourceMap = new HashMap<>();
        JSONObject object = JSON.parseObject(JSON.toJSONString(this));
        for(String key : object.keySet()){
             datasourceMap.put(key,object.get(key)+"");
        }
        return datasourceMap;
    }
}
